package com.taijihuabao.modules.mapper;

import com.taijihuabao.modules.entity.DeptUserEntity;
import com.taijihuabao.modules.model.dept.user.DeptUserDTO;
import com.taijihuabao.modules.model.dept.user.DeptUserPageDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户部门管理
 *
 * @author xiaob
 */
public interface DeptUserMapper {

    /**
     * 获取用户所在部门列表
     *
     * @return
     */
    List<DeptUserEntity> selectDepts();

    /**
     * 获取部门列表(带分页)
     *
     * @param deptUserDTO
     * @return
     */
    List<DeptUserEntity> selectAllDept(DeptUserPageDTO deptUserDTO);

    /**
     * 用户信息（部门编码）
     *
     * @param deptCode
     * @return
     */
    List<DeptUserEntity> selectDeptByDeptCode(String deptCode);

    /**
     * 用户信息（用户id）
     *
     * @param userId
     * @return
     */
    List<DeptUserEntity> selectDeptByUserId(Long userId);

    /**
     * 单条用户信息（用户id,部门编码，角色编码）
     * @param userId
     * * @param deptCode
     * * @param deptRole
     * @return
     */
    DeptUserEntity selectDeptByUserIdAndCodeAndRole(
            @Param("userId") Long userId,@Param("deptCode") String deptCode,
            @Param("deptRole") String deptRole);

    /**
     * 用户信息（角色编码）
     *
     * @param deptRole
     * @return
     */
    List<DeptUserEntity> selectDeptByDeptRole(String deptRole);

    /**
     * 部门信息（name）
     *
     * @param name
     * @return
     */
    List<DeptUserEntity> selectDeptByName(String name);

    /**
     * 单条用户信息（部门用户id）
     *
     * @param id
     * @return
     */
    DeptUserEntity selectDeptById(Long id);

    /**
     * 新增部门
     *
     * @param deptUserEntity
     * @return
     */
    int insertDept(DeptUserDTO deptUserEntity);

    /**
     * 修改部门
     *
     * @param deptUserEntity
     * @return
     */
    int updateDept(DeptUserDTO deptUserEntity);

    /**
     * 逻辑删除部门
     *
     * @param deptUserEntity
     * @return
     */
    Integer deleteDept(DeptUserDTO deptUserEntity);

    /**
     * 根据部门编码和部门角色查询审批人或其他人
     * @param deptCode
     * @param deptRole
     * @return
     */
    DeptUserEntity selectUserIdByDeptCodeAndDeptRole(@Param("deptCode") String deptCode,@Param("deptRole") String deptRole);

}
